package com.yuan.algorithms.newcoder;

/*
题目描述
设有n个正整数，将他们连接成一排，组成一个最大的多位整数。
如:n=3时，3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例，每组测试样例包含两行，第一行为一个整数N（N<=100），第二行包含N个数(每个数不超过1000，空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
示例1
输入
2
12 123
4
7 13 4 246
输出
12312
7424613
 */

import java.util.*;

/**
 * 最大数列组合
 *
 * @author YouYuan
 * @version 1.0
 * @Email xiyousuiyuan@163.com
 * @Date 2018/3/1 17:55
 */
public class MaxSeriesGroup {

    private static Scanner in = new Scanner(System.in);

    private static List<String> data = new ArrayList<String>(100);
    private static StringBuilder result = new StringBuilder(100);
    private static StringBuilder tempStrA = new StringBuilder(100);
    private static StringBuilder tempStrB = new StringBuilder(100);

    public static void main(String[] args) {
        while (in.hasNext()) {
            int n = in.nextInt();
            for (int i = 0; i < n; i++) {
                String str = in.next();
                data.add(str);
            }
            Comparator<Object> objectComparator = (Object o1, Object o2) -> {
                if (o1 == null) {
                    return -1;
                }
                if (o2 == null) {
                    return 1;
                }
                String s1 = o1.toString();
                String s2 = o2.toString();
                tempStrA.append(s1).append(s2);
                tempStrB.append(s2).append(s1);
                int compareTo = tempStrA.toString().compareTo(tempStrB.toString());
                tempStrA.setLength(0);
                tempStrB.setLength(0);
                // 返回倒序
                return -compareTo;
            };
            Collections.sort(data, objectComparator);
            for (int i = 0; i < data.size(); i++) {
                String temp = data.get(i);
                result.append(temp);
            }
            System.out.println(result.toString());
            result.setLength(0);
            data.clear();
        }
    }
}
